package com.qianfeng.springmvc.controller;


//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼            BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * Created by jackiechan on 2021/9/29 09:07
 *
 * @author jackiechan
 * @version 1.0
 * @since 1.0
 */
@Controller
@RequestMapping("/user")
public class UserContrroller {

    //@RequestParam注解是映射请求参数的注解,默认情况下只要请求的参数名和方法的参数名保持一致可以不写,万一不一致可以通过这个注解来指定名字
    // @RequestParam("username") String name 就是请求中的 username 这个参数会被映射 name 上面,这个时候再传 name 会
    // 在使用这个注解的时候 默认参数是必须传递的,不传递不行,如果在不使用注解的情况下, 默认参数是可以不传递的,最多接收到的参数是 null
    // 如果参数名字不一样,还想可以不传递 则需要添加required = false属性
    @RequestMapping("/add1")
    public void test1(@RequestParam(value = "username", required = false) String name) {
        System.err.println("add收到的参数是 name:===>" + name);
    }

    @RequestMapping("/info/{username}")
    public void info(@PathVariable("username") String name) {
        System.err.println("add收到的参数是 name:===>" + name);
    }

    /**
     * 我们之前的请求会出现404 原因是因为返回了 void,现在我想返回一个结果
     * 转发到一个地址
     * @param name
     * @return
     */
    @RequestMapping("/add")
    public String add(String name) {
        System.err.println("add方法收到参数了" + name);
        //返回值默认情况下就是要转发的地址, 可以使用绝对路径,也可以使用相对路径
        //绝对路径是从当前项目的根路径开始的,只需要以/即可
        //相对路径,是以当前请求路径为基准,去掉路径中的最后一个位置,然后拼接上我们的返回值
        //localhost:8080/add.jsp
        //localhost:8080/user/add
        return "/add.jsp";
    }

    @RequestMapping("/update")
    public String update(String name) {
        System.err.println("update 收到的参数是:" + name);
        //我想转发到上面的 add 地址
        //localhost:8080/user/add
        //localhost:8080/user/update
        return "forward:add"; // 转发可以通过forward:来设置路径, 但是转发默认可以忽略forward:
    }
    //上面是转发,如果我想重定向怎么办?
    @RequestMapping("/delete")
    public String delte() {
        System.err.println("delete 执行了");
        //重定向到deletesuccess.jsp地址
        //通过redirect:路径的方式重定向某个地址
        return "redirect:/deletesuccess.jsp";
    }


    //上面是转发,如果我想重定向怎么办?
    @RequestMapping("/cdxxiangdui")
    public String chongdingxiangxiangdui() {
        System.err.println("重定向相对方法 执行了");
        //重定向到deletesuccess.jsp地址
        //通过redirect:可以使用相对路径
        return "redirect:update";
    }

    @RequestMapping("/buchengshu")
    public String buchengshu() {
        System.err.println("测试能不能用相对路径访问到更前面的绝对路径");
        //重定向到deletesuccess.jsp地址
        //通过redirect:路径的方式重定向某个地址
        //当前访问的地址是 /user/buchengshu
        //如果使用相对路径默认是/user/deletesuccess.jsp
        //我能不能通过先跳转到上级父路径再相对的方式
        //cd .. 可以进入父路径,然后跳转到另外一个子路径
        //但是我们几乎不会用相对路径去跳转绝对路径,因为白白的写了一堆的相对.. 后面还是/根路径
        return "redirect:../deletesuccess.jsp";
    }
}
